package com.example.shop;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.FlushMode;
import org.springframework.session.SaveMode;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@Configuration
@ComponentScan("com.example.shop.redis")
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=3600,
        redisNamespace = "project:electricity:shop:",flushMode = FlushMode.IMMEDIATE,saveMode = SaveMode.ON_GET_ATTRIBUTE)
/**
 * maxInactiveIntervalInSeconds：session的过期时间，单位是秒，默认是 30 分钟
 * redisNamespace：由于session是存放在redis中，不同应用程序可能访问同一个redis服务器，
 *                  那么如果要隔离不同应用程序(即这些应用程序是不共享session，各自拥有各自的)，
 *                  则必须使用命名空间，默认：spring.session
 * flushMode：配置什么时候才将session会话的数据保存(同步)到redis中。默认： FlushMode.ON_SAVE
 *                  FlushMode.ON_SAVE：只有在调用SessionRepository.save(session)时才写入会话存储。在web环境中，这通常在HTTP响应提交后就写入到redis中。
 *                  FlushMode.IMMEDIATE：每次session.set属性、session会话创建，都会立即写入redis中
 * cleanupCron：过期会话清理作业的cron表达式。默认每分钟运行一次。
 * saveMode：会话数据的保存方式。默认为SaveMode.ON_SET_ATTRIBUTE，它只保存对会话所做的更改。
 *                  SaveMode.ON_GET_ATTRIBUTE：与ON_SET_ATTRIBUTE一样，多添加了使用Session.getAttribute(String)读取时，也会保存属性。
 *                  SaveMode.ALWAYS
 */
//@SpringBootApplication
public class RedisAutoConfiguration {

}
